#include "Receptor.h"
#include <iostream>
#include <string.h>
#include <fstream>

Receptor::Receptor(Socket *socket, ReproductorVideo *reproductorVideo) {
	this->socket = socket;
	this->reproductorVideo = reproductorVideo;
}

Receptor::Receptor() {
	socket = NULL;
}

void Receptor::run() {
	int recibio = 0;
	int tam_arg;
	char buffer[TAM_BLOQUE_INI];
	std::string clave;
	std::string nombre_usuario;
	char cod_op;
	while(1) {
		recibio = 0;
		if(!socket->recibir(buffer, sizeof(char))) {
			std::cerr << "Codigo no recibido" << std::endl;
			break;
		}
		cod_op = buffer[0];
		if((cod_op != '0') && (cod_op != 'F')) {
			std::cerr << "Codigo de Operacion Invalido" << std::endl;
			break;
		}
		if(!socket->recibir(&buffer[1], sizeof(int))) {
			std::cerr << "Tamaño del bloque no recibido" << std::endl;
			break;
		}
		tam_arg = *(unsigned int*)&buffer[1];
		memmove(buffer, &buffer[(TAM_BLOQUE_INI -1)], TAM_BLOQUE_INI - (TAM_BLOQUE_INI -1));
		char *argumentos = new char[tam_arg];
		std::cout << "Tamanio a recibir (Hilo receptor): " << tam_arg << std::endl;
		if(tam_arg > 0) {
			if(!(socket->recibir(argumentos, tam_arg))) {
				std::cerr << "Bloque de argumentos no recibido" << std::endl;
				break;
			}
		}
		switch(cod_op) {
		case('0'): {
			std::cout << "La clase " << argumentos << " va a empezar" << std::endl;
		//	std::cout << "Aca hay q crear una ventana" << std::endl;
			break;
		}
		case('F'): {
			gdk_threads_enter();
			reproductorVideo->mostrar_frame((uint8_t *)argumentos, tam_arg);
			gdk_threads_leave();
			break;
		}
		}
		delete[] argumentos;
	}
}

Receptor::~Receptor() {
}
